package main

import (
	"bytes"
	"fmt"
)

func main() {
	//fmt.Println(2<<3)
	//fmt.Println(string("PAYPALISHIRING"[13]))
	fmt.Println(convert("ABC", 2))
}

//将一个给定字符串 s 根据给定的行数 numRows ，以从上往下、从左到右进行 Z 字形排列。
//
//比如输入字符串为 "PAYPALISHIRING" 行数为 3 时，排列如下：
//
//P   A   H   N
//A P L S I I G
//Y   I   R
//
//来源：力扣（LeetCode）
//链接：https://leetcode-cn.com/problems/zigzag-conversion
//著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
// 题解：https://leetcode-cn.com/problems/zigzag-conversion/solution/zzi-xing-bian-huan-by-jyd/
func convert(s string, numRows int) string {
	if numRows <= 1 {
		return s
	}
	rows := make([][]byte, numRows)
	line := 0
	flag := -1
	for i := 0; i < numRows; i++ {
		rows[i] = make([]byte, 0)
	}
	le := len(s)
	for i := 0; i < le; i++ {
		rows[line] = append(rows[line], s[i])
		if line == 0 || line == numRows-1 {
			flag = -flag
		}
		line += flag
	}
	buffer := bytes.Buffer{}
	for _, v := range rows {
		buffer.WriteString(string(v))
	}
	return buffer.String()
}

func getTopN(numRows int, start int) int {
	topLine := numRows - start
	topN := 0
	if topLine == 1 {
		topN = 1
	} else {
		topN = (2 << (topLine - 1 - 1)) + 1

	}
	return topN
}
